import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, OneToOne, JoinColumn } from 'typeorm';
import { User } from '../../users/entities/user.entity';

@Entity('match_preferences')
export class MatchPreference {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => User)
  @JoinColumn({ name: 'user_id' })
  user: User;

  @Column()
  userId: number;

  // 基本信息偏好
  @Column({ type: 'int', default: 18 })
  minAge: number;

  @Column({ type: 'int', default: 80 })
  maxAge: number;

  @Column({ type: 'simple-array', nullable: true })
  preferredGenders: string[]; // 偏好性别: ['male', 'female', 'other']

  @Column({ type: 'int', nullable: true })
  minHeight: number; // 最低身高(cm)

  @Column({ type: 'int', nullable: true })
  maxHeight: number; // 最高身高(cm)

  @Column({ type: 'simple-array', nullable: true })
  preferredEducation: string[]; // 偏好教育程度

  @Column({ type: 'simple-array', nullable: true })
  preferredOccupations: string[]; // 偏好职业

  @Column({ type: 'simple-array', nullable: true })
  preferredIncomes: string[]; // 偏好收入范围

  // 位置偏好
  @Column({ nullable: true })
  preferredLocation: string;

  @Column({ type: 'int', default: 50 })
  maxDistance: number; // 单位：公里

  // 婚姻与家庭偏好
  @Column({ type: 'simple-array', nullable: true })
  preferredMaritalStatus: string[]; // 偏好婚姻状态

  @Column({ nullable: true })
  preferredHasChildren: boolean; // 是否接受有孩子的人

  @Column({ nullable: true })
  preferredWantsChildren: boolean; // 是否接受想要孩子的人

  // 生活习惯偏好
  @Column({ type: 'simple-array', nullable: true })
  preferredSmoking: string[]; // 偏好吸烟习惯

  @Column({ type: 'simple-array', nullable: true })
  preferredDrinking: string[]; // 偏好饮酒习惯

  @Column({ type: 'simple-array', nullable: true })
  preferredDiet: string[]; // 偏好饮食习惯

  @Column({ nullable: true })
  acceptsPets: boolean; // 是否接受养宠物的人

  // 兴趣与价值观偏好
  @Column({ type: 'simple-array', nullable: true })
  preferredInterests: string[]; // 偏好兴趣爱好

  @Column({ type: 'simple-array', nullable: true })
  preferredHobbies: string[]; // 偏好详细兴趣爱好

  @Column({ type: 'simple-array', nullable: true })
  preferredValues: string[]; // 偏好价值观

  @Column({ type: 'simple-array', nullable: true })
  preferredReligions: string[]; // 偏好宗教信仰

  @Column({ type: 'simple-array', nullable: true })
  preferredPoliticalViews: string[]; // 偏好政治观点

  // 交友目的偏好
  @Column({ type: 'simple-array', nullable: true })
  preferredRelationshipGoals: string[]; // 偏好交友目的

  @Column({ type: 'simple-array', nullable: true })
  preferredLanguages: string[]; // 偏好语言

  // 匹配重要性权重 (0-10，值越高表示该项越重要)
  @Column({ type: 'float', default: 5 })
  ageWeight: number;

  @Column({ type: 'float', default: 3 })
  locationWeight: number;

  @Column({ type: 'float', default: 7 })
  interestsWeight: number;

  @Column({ type: 'float', default: 4 })
  lifestyleWeight: number; // 生活习惯权重

  @Column({ type: 'float', default: 6 })
  valuesWeight: number; // 价值观权重

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}